Mikmak Model UnitBase
De model klasse voor de Unitbase entiteit
Probleem
Bij het toevoegen of wijzigen van een basiseenheid zijn er enkele regels waarmee we rekening moeten houden. De validatie hiervan gebeurt in deze Model klasse in de setters.
Design
We baseren ons op het Mikmak logisch model om de model klasse te implementeren. Voor het gemak reproduren we hier nog eens het logisch model.
Tabelnaam: UnitBase
Displaynaam: Basiseenheid
Volgorde: Name
Column Name | Display Text | Searchable | Default Value | Unique | Type | Length | Variable | International | Required | Reference Table | Reference Column | Display Column | List | HTML element | HTML type attribute | HTML name attribute | HTML pattern attribute | HTML title attribute | HTML placeholder attribute |
Name | Naam | SELECTBY | NO | YES | CHAR | 255 | YES | YES | YES | NA | NA | NA | YES | INPUT | TEXT | name | NA | NA | NA |
Description | Beschrijving | NO | NO | NO | CHAR | 1024 | YES | YES | NO | NA | NA | NA | NO | TEXTEAREA | NA | description | NA | NA | NA |
ShippingCostMultiplier | Verzendkostenfactor | NO | NO | NO | FLOAT | NA | NA | NA | NO | NA | NA | NA | YES | INPUT | TEXT | shippingcostmultiplier | NA | NA | NA |
Code | Code | SELECTBY | NO | YES | CHAR | 2 | YES | YES | YES | NA | NA | NA | YES | INPUT | TEXT | code | NA | NA | NA |
Id | NA | NA | PK | YES | Integer | NA | NA | NA | Yes | NA | NA | NA | YES | INPUT | HIDDEN | id | NA | NA | NA |
Oplossing
- Maak een klassenbestand met de naam UnitBase.cs in de map Models.
Een model klasse toevoegen Een klassenbestand toevoegen - Maak daarin een klasse met de naam
UnitBase
. - Maak voor elke kolom in de tabel een getter/setter property:
- Het gegevenstype van SQL moet je in overeenstemming brengen met het C# gevenstype. Hoe je SQL gegevenstypes in overeenstemming brengt met C# gegevenstypes lees je in EF entiteiten. Maar SQL beschikt over veel meer gegevenstypes dan C#. Hoe je die extra informatie (o.a. lengte, variabel, nationale karakters) van SQL kunt overbrengen naar C# en omgekeerd, lees je in EF object relational mapping met attributen. In de UnitBase tabel zitten geen foreign keys. We hebben dus geen referenceproperties nodig, alleen eenvoudige scalaire eigenschappen.
- Tenslotte voeg je de businessregels van het conceptueel model (o.a. verplichte kolommen, unieke waarden, displaynaam, primary key) toe. Hoe je dat doet lees je in EF Business regels toevoegen met attributen.
- Dat levert de volgende code op:
using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Webwinkel.Models { public class UnitBase { [Key] public int Id { get; set; } [Required(ErrorMessage = "{0} is verplicht.")] [Column(TypeName = "nvarchar")] [MaxLength(255, ErrorMessage = "{0} kan maximum 255 karakters bevatten.")] [DisplayName("Naam")] public string Name { get; set; } [Column(TypeName = "nvarchar")] [MaxLength(1024, ErrorMessage = "{0} kan maximum 1024 karakters bevatten.")] [DisplayName("Beschrijving")] public string Description { get; set; } [Column(TypeName = "float")] [DisplayName("Verzendingskostfactor")] public float ShippingCostMultiplier { get; set; } [Required(ErrorMessage = "{0} is verplicht.")] [Column(TypeName = "char")] [MaxLength(2, ErrorMessage = "{0} kan maximum 2 karakters bevatten.")] [DisplayName("Code")] public string Code { get; set; } } }
2016-11-28 13:10:42